home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Programmer Power Tools
/
Programmer Power Tools.iso
/
lan
/
nbsamp.arc
/
NBRCV.C
next >
Wrap
Text File
|
1988-09-26
|
3KB
|
97 lines
/* NBRCV.C - sample program - receives NetBIOS broadcast. - */
/* Paul McGinnis - AST Research, Data Comm Support - Dept. 430 */
/* August 1988. - comments added 9/26/88 */
/* */
/* General calling sequence for NetBIOS calls: */
/* 1. Set up NCB (Network Control Block) */
/* 2. Make ES:BX point to NCB structure */
/* 3. Load AX with 100h */
/* 4. Generate an INT 5Ch */
/* */
/* NetBIOS commands and definitions in NETBIOS.H */
/* */
/* Compilation information: */
/* Compiler: Borland Turbo C v1.5 */
/* Memory model: Small */
/* Floating point support: none */
#include <dos.h>
#include <stdio.h>
#include <netbios.h>
#include <stdlib.h>
#include <string.h>
main()
{
NCB far * rcv_block;
char far * rcv_message;
char far * session_name;
unsigned char ret_code, net_num, iflag;
rcv_block = (NCB far *) malloc(sizeof(NCB));
rcv_message = (char far *) malloc(80);
session_name = (char far *) malloc(16);
_AH = 0;
geninterrupt(0x2a); /* Check to see if NetBIOS is loaded */
iflag = _AH;
if (!iflag)
{
puts(" *** ERROR - NetBIOS not installed. ***");
return;
}
printf("Enter session name: ");
gets(session_name);
puts("generating network name...");
rcv_block -> NCB_COMMAND = ADD_NAME_WAIT; /* Use default time-out values */
rcv_block -> NCB_LANA_NUM = 0;
rcv_block -> NCB_STO = 0;
rcv_block -> NCB_RTO = 0;
strncpy(rcv_block -> NCB_NAME, session_name, 16); /* Copy name to NCB */
strncpy(rcv_block -> NCB_CALLNAME, "*", 16); /* Check all names on net */
_ES = FP_SEG(rcv_block);
_BX = FP_OFF(rcv_block);
_AX = 0x100;
geninterrupt(0x5c);
ret_code = _AL;
net_num = rcv_block -> NCB_NUM;
if (ret_code)
{
printf("Bad return code = %02Xh\n", ret_code);
return;
}
printf("Session established. Name number = %02Xh\n", net_num);
puts("Waiting for broadcast message...");
rcv_block -> NCB_RTO = 0;
rcv_block -> NCB_BUFFER_OFFSET = FP_OFF(rcv_message);
rcv_block -> NCB_BUFFER_SEGMENT = FP_SEG(rcv_message);
rcv_block -> NCB_LENGTH = 80;
rcv_block -> NCB_COMMAND = RECEIVE_BCST_DATAGRAM_WAIT; /* Wait until rcvd. */
_ES = FP_SEG(rcv_block);
_BX = FP_OFF(rcv_block);
_AX = 0x100;
geninterrupt(0x5c);
ret_code = _AL;
pokeb(FP_SEG(rcv_message), FP_OFF(rcv_message) + rcv_block -> NCB_LENGTH, 0);
if (ret_code)
printf("Error number = %02Xh\n", ret_code);
else
{
printf("%c*** %Fs\n", 7, rcv_message);
printf("From: %Fs\n", rcv_block -> NCB_CALLNAME);
}
printf("Releasing session >>>%Fs<<<, number %02Xh\n",
rcv_block -> NCB_NAME, net_num);
rcv_block -> NCB_NUM = net_num;
rcv_block -> NCB_COMMAND = DELETE_NAME_WAIT; /* Schedule name for removal */
_ES = FP_SEG(rcv_block);
_BX = FP_OFF(rcv_block);
_AX = 0x100;
geninterrupt(0x5c);
ret_code = _AL;
if (ret_code)
printf("Error number = %02Xh.\n", ret_code);
else
puts("Completed normally.");
}